#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# 原始版本代码文件
import RPi.GPIO as GPIO
import time
 
colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F]
pins = {'pin_R':11, 'pin_G':12}  # pins is a dict
 
GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
for i in pins:
    GPIO.setup(pins[i], GPIO.OUT)   # Set pins' mode is output
    GPIO.output(pins[i], GPIO.HIGH) # Set pins to high(+3.3V) to off led
 
p_R = GPIO.PWM(pins['pin_R'], 2000)  # set Frequece to 2KHz
p_G = GPIO.PWM(pins['pin_G'], 2000)
 
p_R.start(0)      # Initial duty Cycle = 0(leds off)
p_G.start(0)
 
def map(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
 
def setColor(col):   # For example : col = 0x112233
    R_val = (col & 0x1100) >> 8
    G_val = (col & 0x0011) >> 0
     
    R_val = map(R_val, 0, 255, 0, 100)
    G_val = map(G_val, 0, 255, 0, 100)
     
    p_R.ChangeDutyCycle(R_val)     # Change duty cycle
    p_G.ChangeDutyCycle(G_val)
 
def loop():
    while True:
        for col in colors:
            setColor(col)
            time.sleep(0.5)
 
def destroy():
    p_R.stop()
    p_G.stop()
    for i in pins:
        GPIO.output(pins[i], GPIO.HIGH)    # Turn off all leds
    GPIO.cleanup()
 
if __name__ == "__main__":
    try:
        loop()
    except KeyboardInterrupt:
        destroy()